package com.lancoo.znbkxx.teacher.aibkTestCoach.paperToPersonalAnalysis.aibkAnalysisWXXZ

import com.lancoo.znbkxx.teacher.aibkTestCoach.paperToPersonalAnalysis.AnalysisInforIndexHelp
import com.lancoo.znbkxx.teacher.aibkTestCoach.paperToPersonalAnalysis.AnalysisInforIndexHelp.getChildListBean
import com.lancoo.znbkxx.teacher.aibkTestCoach.paperToPersonalAnalysis.aibkAnalysisZHT.AnalysisFragmentParentXzt
import android.animation.ObjectAnimator
import android.content.Context
import android.os.Handler
import android.text.Html
import android.util.Log
import android.view.View
import android.webkit.JavascriptInterface
import android.webkit.ValueCallback
import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import androidx.viewpager.widget.ViewPager
import com.lancoo.znbkxx.teacher.R
import com.lancoo.znbkxx.teacher.aibkTestCoach.aibkDialog.ShowDialogTools
import com.lancoo.znbkxx.teacher.aibkTestCoach.kBase.KBaseFragment
import com.lancoo.znbkxx.teacher.aibkTestCoach.kBase.KBaseFragmentPagerAdapter
import com.lancoo.znbkxx.teacher.aibkTestCoach.networkRequest.entity.PaperPerAnalysisInfor
import com.lancoo.znbkxx.teacher.utils.WebStyleUtils
import com.lancoo.znbkxx.teacher.utils.WebStyleUtils.returnImageUrlsFromHtml
import com.lancoo.znbkxx.teacher.widget.KWebView
import kotlinx.android.synthetic.main.aibk_include_article_view.view.*
import kotlinx.android.synthetic.main.aibk_include_child_answer_title_infor.view.*
import kotlinx.android.synthetic.main.aibk_include_parent_audioplayer_a.view.*
import kotlinx.android.synthetic.main.aibk_include_ques_answer_view.view.*
import kotlinx.android.synthetic.main.aibk_include_ques_assessment.view.*
import kotlinx.android.synthetic.main.aibk_include_ques_web_ask_view.view.*
import kotlinx.android.synthetic.main.aibk_include_question_information_view.view.*
import kotlinx.android.synthetic.main.aibk_fragment_model_splitlayout.view.*
import java.util.*

class AnalysisFragmentWxxz(
        val activity: AppCompatActivity,
        val paperPerAnalysisInfor: PaperPerAnalysisInfor,
        val index_A: Int,
        val index_B: Int
) : KBaseFragment() {

    private var rootView: View? = null
    private var isAddView = false
    private var childVpPosition = 0
    private var jumpSortIndex = ""
    private var scale = 0f
    private var current_Y = 0
    private var last_Y = 0
    private var fragmentList: MutableList<Fragment>? = ArrayList()

    override fun createLayout(): Int {
        return R.layout.aibk_fragment_model_splitlayout
    }

    override fun initView(view: View?) {
        scale = resources.displayMetrics.density
        rootView = view
        rootView!!.RlAudioPlayer.visibility = View.GONE
        rootView!!.RlArticleView.visibility = View.GONE

        showQuestionView()
    }

    //显示试题内容
    private fun showQuestionView() {

        //是否显示来源
        var resource = paperPerAnalysisInfor.TypeList[index_A].QuesDetailList[index_B].Resource
        if (resource.isEmpty()) {
            rootView!!.IncludeQuesInformationView.visibility = View.GONE
        } else {
            rootView!!.IncludeQuesInformationView.visibility = View.VISIBLE
            rootView!!.IncludeQuesInformationView.TvSourceFrom.text = "来源: $resource"
            //隐藏试题准确率
            rootView!!.IncludeQuesInformationView.TvScoreRate.visibility = View.GONE
        }

        //隐藏单题评估系数
        rootView!!.RlQuesAssessment.visibility = View.GONE

        //加载题干内容
        var ask = paperPerAnalysisInfor.TypeList[index_A].QuesDetailList[index_B].QuesBody
        ask = ask.replace("clickFunction", "Android.clickFunction")
        if (WebStyleUtils.hasTable(ask)) {
            WebStyleUtils.showWebViewCssStyle(activity, rootView!!.WvAsk, ask, false)
        } else {
            WebStyleUtils.showWebViewCssStyle(activity, rootView!!.WvAsk, ask, true)
        }
        rootView!!.WvAsk.addJavascriptInterface(
                JSInterface(
                        activity,
                        returnImageUrlsFromHtml(ask)
                ), "Android"
        )

        rootView!!.WvAsk.webViewClient = object : WebViewClient() {
            override fun onPageFinished(view: WebView, url: String) {
                super.onPageFinished(view, url)
                rootView!!.RlWebLoading.visibility = View.GONE
                WebStyleUtils.setWebImageClick(view, "Android")

                isAddView = true
                handler.sendEmptyMessage(0)
            }
        }

        rootView!!.WvAsk.setOnScrollChangeListener(object : KWebView.OnScrollChangeListener {
            override fun onPageEnd(l: Int, t: Int, oldl: Int, oldt: Int) {
                Log.e("KWvA", "已经到达地端")
            }

            override fun onPageTop(l: Int, t: Int, oldl: Int, oldt: Int) {
                Log.e("KWvA", "已经到达顶端")
            }

            override fun onScrollChanged(l: Int, t: Int, oldl: Int, oldt: Int) {
                Log.e("KWvA", "=======oldt========$oldt")
                last_Y = oldt
            }
        })
        //加载作答区域
        fragmentList!!.clear()
        var childListSize = paperPerAnalysisInfor.TypeList[index_A].QuesDetailList[index_B].ChildList.size
        for (c in 0 until childListSize) {
            (fragmentList as ArrayList<Fragment>).add(
                    AnalysisFragmentParentXzt(activity, paperPerAnalysisInfor, index_A, index_B, c)
            )
        }

        val mAdapter = KBaseFragmentPagerAdapter(childFragmentManager, fragmentList as ArrayList<Fragment>)
        rootView!!.VpAnswer.adapter = mAdapter
        rootView!!.VpAnswer.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
            override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}

            override fun onPageSelected(position: Int) {
                childVpPosition = position
                handler.sendEmptyMessage(1)
            }

            override fun onPageScrollStateChanged(state: Int) {}
        })
    }

    private fun showChildVpInfor() {
        var childListSize = paperPerAnalysisInfor.TypeList[index_A].QuesDetailList[index_B].ChildList.size
        rootView!!.TvChildAnswerCount.text = Html.fromHtml(resources.getString(R.string.aibk_xzt_child_count, childListSize))
        rootView!!.TvChildAnswerCurrent.text = Html.fromHtml(resources.getString(R.string.aibk_current_child_vp, childVpPosition + 1, childListSize))
    }

    //JS点击事件处理
    inner class JSInterface(var context: Context, var imageUrls: Array<String>?) {

        @JavascriptInterface
        fun clickFunction(position: String) {
            //在webview中进行点击选择需要作答的区间
            activity.runOnUiThread {
                childVpPosition = AnalysisInforIndexHelp.ItemSortIndex_return_ChildVpIndex(paperPerAnalysisInfor, position)
                rootView!!.VpAnswer.setCurrentItem(childVpPosition,true)
            }
        }

        //java回调js代码，不要忘了@JavascriptInterface这个注解，不然点击事件不起作用
        @JavascriptInterface
        fun openImage(img: String, pos: Int) {
            val paths = ArrayList<String>()
            paths.add(img)
            Log.e("openImage", "$pos========点击了图片=========$img")
            ShowDialogTools.showBigImageDialog(activity, img)
        }
    }

    private fun showBlankView() {

        var kWvHeight = rootView!!.WvAsk.height//获取当前webview控件的高度
        rootView!!.WvAsk.evaluateJavascript(
                "javascript:topHeight('blank$jumpSortIndex')",
                ValueCallback<String?> { value ->
                    val dp = Integer.valueOf(value!!)
                    current_Y = (Math.round(dp * scale) - kWvHeight / 2).toInt()//此处关键，保持被点击的区域处于可见区域中间位置
                    val anim: ObjectAnimator =
                            ObjectAnimator.ofInt(
                                    rootView!!.WvAsk, "scrollY", last_Y, current_Y
                            )
                    anim.setDuration(500).start()
                    last_Y = current_Y
                })

        val childListSize = paperPerAnalysisInfor.TypeList[index_A].QuesDetailList[index_B].ChildList.size
        for (c in 0 until childListSize) {
            val itemSortIndex = getChildListBean(paperPerAnalysisInfor, index_A, index_B, c).ItemList[0].SortIndex
            val ItemAnswer = getChildListBean(paperPerAnalysisInfor, index_A, index_B, c).ItemList[0].ItemAnswer
            var stuAnswer = paperPerAnalysisInfor.TypeList[index_A].QuesAnswerList[index_B].ChildAnswerList[c].ItemList[0].StuAnswer

            if (itemSortIndex == jumpSortIndex) {
                rootView!!.WvAsk.loadUrl("javascript:setBackGroundColor('" + "blank" + itemSortIndex +
                        "','" + "#ceebff" + "','" + "5px" + "','" + "0px solid #ffffff" + "')")
            } else {
                rootView!!.WvAsk.loadUrl("javascript:setBackGroundColor('" + "blank" + itemSortIndex +
                        "','" + "#00000000" + "','" + "0px" + "','" + "1px solid #848484" + "')")
            }
            showBlankItemAnswer(itemSortIndex, stuAnswer, ItemAnswer)
        }
    }

    private fun showBlankItemAnswer(
            sortIndex: String,
            stuAnswer: String,
            itemAnswer: String
    ) {
        if (itemAnswer == stuAnswer) {
            rootView!!.WvAsk.loadUrl(
                    "javascript:CalledByJavaCodeWithPara('" + "blank" + sortIndex
                            + "','" + "<font color=\"#00b30d\">"
                            + "&nbsp&nbsp&nbsp&nbsp&nbsp" + itemAnswer + "&nbsp&nbsp&nbsp&nbsp&nbsp" + "</font>')"
            )
        } else {
            if (stuAnswer.isEmpty()) {
                val stuAnswerX = activity.getString(R.string.aibk_analysis_xz_no_stuanswer)
                rootView!!.WvAsk.loadUrl(
                        "javascript:CalledByJavaCodeWithPara('" + "blank" + sortIndex
                                + "','" + "<font color=\"#ff0000\">" + "&nbsp&nbsp" + stuAnswerX + "</font>"
                                + "<font color=\"#00b30d\">" + "(" + itemAnswer + ")" + "&nbsp&nbsp" + "</font>')"
                )
            } else {
                rootView!!.WvAsk.loadUrl(
                        "javascript:CalledByJavaCodeWithPara('" + "blank" + sortIndex
                                + "','" + "<font color=\"#ff0000\">" + "&nbsp&nbsp" + stuAnswer + "</font>"
                                + "<font color=\"#00b30d\">" + "(" + itemAnswer + ")" + "&nbsp&nbsp" + "</font>')"
                )
            }
        }
    }

    //答题卡跳转
    fun fragmentJumpToSortIndex(itemSortIndex: String) {
        childVpPosition = AnalysisInforIndexHelp.ItemSortIndex_return_ChildVpIndex(paperPerAnalysisInfor, itemSortIndex)
        if (isAddView) {
            handler.sendEmptyMessageDelayed(0, 100)
        }
    }

    //答题卡跳转辅助方法
    private val handler = Handler(Handler.Callback { msg ->
        when (msg.what) {
            0 -> {
                jumpSortIndex = AnalysisInforIndexHelp.ChildVpIndex_return_ItemSortIndex(paperPerAnalysisInfor, index_A, index_B, childVpPosition)
                showBlankView()
                rootView!!.VpAnswer.setCurrentItem(childVpPosition, true)
                showChildVpInfor()
            }
            1 -> {
                jumpSortIndex = AnalysisInforIndexHelp.ChildVpIndex_return_ItemSortIndex(paperPerAnalysisInfor, index_A, index_B, childVpPosition)
                showBlankView()
                showChildVpInfor()
            }
        }
        false
    })

}